/*
 * @Author: 晟松
 * @Date: 2021-12-10 17:00:41
 * @LastEditors: 晟松
 * @LastEditTime: 2022-03-24 16:25:18
 * @FilePath: \mini-vue3d:\Code\node\koa2\volunteer-service\src\main\service\Web3Service.js
 * @Description:
 */

import sequelize from "@main/db";
import { isNull, isBlank } from "@main/util/ValidateUtil";
import { ParamError, LoginError, NotFoundError } from "@main/common/CommonError";
import { encryptPassword, checkPassword } from "@main/util/PasswordUtil";
import config from "@main/config";
import blacklist from "blacklist";
import whiteListed from "whitelisted";
import jwt from "jsonwebtoken";
import enums from "@main/config/enums";
import { toEnumNum, toEnumStr } from "@main/util/EnumsUtil";

import remix from "@main/web3js/web3";

// 获取所有定义的model
const models = sequelize.models;

class Web3Service {
    /**
     * @description: 校级管理员审核院级管理员
     * @param {*} params
     * @return {*}
     */
    static async init(params) {}
    /**
     * @description: 使用后remix更新一个表中的一个数据，同时再次将对应的hash值存进去 --- 更新一条数据
     * @param {*} tableName 数据表名，类似于 student vol groupVol
     * @param {*} id 都通过表的id主键进行查询和更新
     * @return {*}
     */
    static async updateOne(tableName, id) {
        // 将第一个字符转为大写
        let table = tableName[0].toUpperCase() + tableName.slice(1);

        let res = await models[tableName].findOne({
            where: {
                id,
            },
        });

        let data = res.dataValues;
        console.log("data: ", data);
        // 使用这种进行多种化的调用
        let hash = await remix[`remix${table}`](data);

        // 然后更新
        await models[tableName].update(hash, {
            where: {
                id: data.id,
            },
        });
    }

    /**
     * @description:初始化studentGroupVol表的一个数据
     * @param {*}
     * @return {*}
     */
    static async updateStudentGroupVol(studentId, groupVolId) {
        let dataOne = await models["student_groupVol"].findOne({
            where: {
                studentId,
                groupVolId,
            },
        });
        // 注意是dataValues
        let data = dataOne.dataValues;
        console.log("data: ", data);
        let res = await remix.remixStudentGroupVol(data);
        console.log("res: ", res);
        // 然后进行更新，这里是特殊的表的列的处理
        await models["student_groupVol"].update(res, {
            where: {
                studentId,
                groupVolId,
            },
        });
    }
    /**
     * @description: 更新一个表中的所有数据，有点感觉类似init里面的initTable了，差别可能就在表名大小写上面了
     * @param {*} tableName
     * @param {*} id
     * @return {*}
     */
    static async updateTable(tableName) {
        // 将第一个字符转为大写
        let table = tableName[0].toUpperCase() + tableName.slice(1);

        let allTableValues = await models[tableName].findAll();

        let len = allTableValues.length;
        for (let i = 0; i < len; i++) {
            // 注意是dataValues
            let data = allTableValues[i].dataValues;
            console.log("data: ", data);
            // 使用这种进行多种化的调用
            let res = await remix[`remix${table}`](data);
            console.log("res: ", res);
            // 然后进行更新
            await models[tableName].update(res, {
                where: {
                    id: data.id,
                },
            });
        }
    }
}

export default Web3Service;
